package BasicPractice

//Scala数据类型
object dataType {
  def main(args: Array[String]): Unit = {
    /*与Java不同，Scala中没有原生类型。
    Scala中的所有数据类型都是具有对其数据操作的方法的对象。
    所有Scala类型作为类型层次结构的一部分存在。
    您在Scala中定义的每个类也将自动属于此层次结构。*/

    /*Any，AnyVal和AnyRef类型
    类Any是Scala类层次结构的根，是一个抽象类。
    Scala中的每个类都直接或间接从这个类继承。
    AnyVal和AnyRef扩展任何类型。 Any，AnyVal和AnyRef类型是Scala类型层次结构的根。
    所有其他类型都来自AnyVal和AnyRef。
    扩展AnyVal的类型称为值类型。*/

    //Scala布尔类型
        //布尔类型限于文本true或文本false，如下面的示例所示。
        //创建一个布尔值类型变量
        val x = true
        val y = !false

    //Scala字符类型
        //字符常量用单引号编写，区别于使用双引号写的字符串常量。
        val z = 'a'

    //Scala字符串
        //Scala的String构建在Java的String上，并向Java的String添加了字符串插值等附加功能。
        val hello = "Hello"
        println(hello)
        //字符串插值：使用美元符号运算符$引用变量。

    //Scala数字类型
        //Scala可以按顺序自动将数字从一种类型转换为另一种类型。
        //Byte . Short . Int . Long . Float . Double.

    //Scala常量值
    //Scala Nothing和Null类型
        /*Null是所有引用类型的子类型。它是所有AnyRef类型的子类型，为关键字null提供类型。
        Scala没有null关键字。
        例如，不可能为scala.Int类型的变量分配null。
        对于影响程序流程的操作，没有任何提供兼容的返回类型。
        Nothing的用法之一是它发出异常终止的信号。
        任何时候，如果你想使用 null ，请改用 Option 。*/

    //Scala选项

    //Scala范围

    //Scala元组
        /*元组是具有相同或不同类型的两个或更多个值的有序容器。
        然而，与列表和数组不同，没有办法迭代元组中的元素。
        它的目的只是作为一个多个值的容器。
        元组在需要组合离散元素并提供结构化数据的通用方法时非常有用。
        我们可以通过两种方式创建一个元组：
        通过用逗号分隔的值写入值，并用一对括号括起来
        通过使用关系运算符-> */
        val tuple = (1, false, "scala")
        val tuple2 = "title" -> "Beginning Scala"
        /*元组的单个元素可以通过其索引访问，其中第一个元素具有索引1。
        以下代码显示了访问元组的第三个元素。*/
        val third = tuple._3
    //Scala单元类型
        /*单元类型用于定义不返回数据的函数。它类似于Java中的void关键字。
        * 单元常量是一对空圆括号, ()。
        * */
  }
}
